
export class DateTimeUtil {
    /**
     * 获取指定日期的年份
     * @param date 日期对象
     */
    static getYear(date: Date): number {
        return date.getFullYear();
    }

    /**
     * 获取指定日期的月份
     * @param date 日期对象
     */
    static getMonth(date: Date): number {
        return date.getMonth() + 1; // JavaScript月份从0开始，所以需要+1
    }

    /**
     * 获取指定日期的日
     * @param date 日期对象
     */
    static getDay(date: Date): number {
        return date.getDate();
    }

    /**
     * 获取指定日期的月份
     * @param date 日期对象
     */
    static addMonth(date: Date,count : number): Date {
        let month = date.getMonth();
        if(count + month > 11){
            count = count + month - 11;
            date.setUTCFullYear(date.getFullYear() + 1)
        }
        date.setMonth(month + count)
        return date;
    }

    /**
     * 判断两个日期是否为同一天
     * @param date1 第一个日期对象
     * @param date2 第二个日期对象
     */
    static isSameDay(date1: Date, date2: Date): boolean {
        return this.getYear(date1) === this.getYear(date2) &&
                this.getMonth(date1) === this.getMonth(date2) &&
                this.getDay(date1) === this.getDay(date2);
    }

    /**
     * 格式化日期为字符串
     * @param date 日期对象
     * @param format 自定义格式，默认为'yyyy-MM-dd'
     */
    static formatDate(date: Date, format: string = 'yyyy-MM-dd'): string {
        const year = this.getYear(date);
        const month = this.getMonth(date).toString().padStart(2, '0');
        const day = this.getDay(date).toString().padStart(2, '0');

        let formattedDate = format.replace('yyyy', year.toString());
        formattedDate = formattedDate.replace('MM', month);
        formattedDate = formattedDate.replace('dd', day);

        return formattedDate;
    }

    /**
     * 格式化日期为字符串
     * @param date 日期对象
     * @param format 自定义格式，默认为'yyyy-MM-dd'
     */
    static formatDateToString(dateStr: string, format: string = 'yyyy-MM-dd'): string {
        const date = new Date();
        date.setTime(parseInt(dateStr))
        const year = this.getYear(date);
        const month = this.getMonth(date).toString().padStart(2, '0');
        const day = this.getDay(date).toString().padStart(2, '0');

        let formattedDate = format.replace('yyyy', year.toString());
        formattedDate = formattedDate.replace('MM', month);
        formattedDate = formattedDate.replace('dd', day);

        return formattedDate;
    }

    /**
     * 将日期字符串转换成Date对象
     * @param strDate
     * @returns
     */
    static toDate(strDate: string): Date {
        const date = new Date(strDate);
        return date;
    }

    /**
     * 获取当天0秒
     * @param strDate
     * @returns
     */
    static getDayStart(strDate: string): Date {
        const date = this.toDate(strDate);
        date.setHours(0,0,0)
        return date;
    }

    /**
     * 获取当前最后1秒
     * @param strDate
     * @returns
     */
    static getDayEnd(strDate: string): Date {
        const date = new Date(strDate);
        date.setHours(23,59,59)
        return date;
    }
}